package cn.lg.soar.flow.api.service;

import cn.lg.soar.flow.api.model.*;
import org.springframework.web.bind.annotation.RequestParam;

import java.util.Collection;
import java.util.List;

/**
 * @author luguoxiang
 * 开源项目：https://gitee.com/lgx1992/lg-soar 求star！请给我star！请帮我点个star！
 */
public interface IFlowTaskApi {

    /**
     * 启动流程
     * @param startFlowDTO
     * @return
     */
    FlowInfoDTO startFlow(StartFlowDTO startFlowDTO);

    /**
     * 完成任务
     * @param completeTaskDTO
     * @return
     */
    FlowInfoDTO completeTask(CompleteTaskDTO completeTaskDTO);

    /**
     * 撤销流程
     * @param revokeDTO
     */
    void revoke(RevokeDTO revokeDTO);

    /**
     * 当前任务
     * @param userId 用户id
     * @param procInstId 流程实例id
     * @return
     */
    List<ApprovalTaskDTO> approvalTasks(Long userId, String procInstId);

    /**
     * 获取用户当前流程实例id
     * @param userId
     * @param flowCode
     * @return
     */
    List<String> currentProcInstIds(Long userId, String flowCode);

    /**
     * 当前任务和审批人
     * @param procInstIds
     * @return
     */
    List<TaskInfoDTO> currentTaskUserIds(Collection<String> procInstIds);

    /**
     * 流程当前任务
     * @param procInstIds
     * @return
     */
    List<TaskInfoDTO> currentTasks(Collection<String> procInstIds);

    /**
     * 审批日志
     * @param procInstId 流程实例id
     * @return
     */
    List<AuditLogDTO> auditLogList(String procInstId);

    /**
     * 审批记录
     * @param flowCode 流程code
     * @param bizId 业务id
     * @return
     */
    List<AuditLogDTO> auditLogList(String flowCode, String bizId);

    /**
     * 流程进度
     * @param procInstId
     * @return
     */
    ProgressVO progress(@RequestParam("procInstId") String procInstId);

    /**
     * 任务详情
     * @param taskId
     * @return
     */
    TaskDetailDTO taskDetail(String taskId);

}
